package com.pesking.core.sqlparser.processor;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.pesking.core.exception.ParameterException;
import com.pesking.core.parameter.Parameter;
import com.pesking.core.sqlparser.parameter.SqlParameter;
import com.pesking.core.sqlparser.parameter.SqlParameterProcessor;
import com.pesking.core.util.StringUtils;

public class OrStringSqlParameterHandler extends SqlParameterProcessor {

	@Override
	public void handle(StringBuilder sbSQL, Parameter parameter, List<SqlParameter> processors,SqlParameter sqlParameter) {
		String name = sqlParameter.getName();
		String field = sqlParameter.getField(1);
		if (StringUtils.isBlank(field)){
			throw new ParameterException("[OR_D:参数名:字段名] 或者[OR_S:参数名:字段名]");
		}
		String []values = parameter.getParameterValues(name);
		List<String> list = new ArrayList<String>();
		for(int i = 0 ; i < values.length ; i++){
			if (!StringUtils.isBlank(values[i])){
				list.add(values[i]);
			}
		}
		if (list != null && list.size() > 0){
			sbSQL.append("(");
			int len = list.size();
			for(int i = 0 ; i < len ; i++){
				String v = list.get(i);
				if (!StringUtils.isBlank(v)){
					v = formatValue(v);	
					sbSQL.append(field).append("=");
					sbSQL.append("'").append(v).append("'");
				}
				if (i < len - 1){
					sbSQL.append(" or ");
				}
			}
			sbSQL.append(")");
		}
		else{
			sbSQL.append(" 1 = 1 ");
		}
	}

	@Override
	public List<String> getSqlParameterType() {
		return Arrays.asList(new String []{"DR_S"});
	}

	/*
	public void handle(StringBuffer sbSQL, SqlParameter sqlParameter,
			RequestParameter requestParameter,
			List<SqlParameterHandler> handlerList, List<String> paramValue,
			Dialect dialect) {
		String name = sqlParameter.getName();
		String field = sqlParameter.getField(1);
		if (StringUtils.isBlank(field)){
			throw new ParameterException("[OR_D:参数名:字段名] 或者[OR_S:参数名:字段名]");
		}
		String []values = requestParameter.getParameterValues(name);
		List<String> list = new ArrayList<String>();
		for(int i = 0 ; i < values.length ; i++){
			if (!StringUtils.isBlank(values[i])){
				list.add(values[i]);
			}
		}
		if (list != null && list.size() > 0){
			sbSQL.append("(");
			int len = list.size();
			for(int i = 0 ; i < len ; i++){
				String v = list.get(i);
				if (!StringUtils.isBlank(v)){
					v = SqlParserHelper.formatValue(v);	
					sbSQL.append(field).append("=");
					sbSQL.append("'").append(v).append("'");
				}
				if (i < len - 1){
					sbSQL.append(" or ");
				}
			}
			sbSQL.append(")");
		}
		else{
			sbSQL.append(" 1 = 1 ");
		}
	}

	
	public void setParameter(Connection connection,
			PreparedStatement ps, int index, String paramValue)
			throws SQLException {
		// TODO Auto-generated method stub

	}

	@Override
	public SqlParameterTypeEnum getSqlParameterType() {
		return SqlParameterTypeEnum.OR_S;
	}
	*/
}
